package com.xfyuao.web;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xfyuao.entity.Dept;
import com.xfyuao.entity.Emp;
import com.xfyuao.service.DeptService;
import com.xfyuao.service.EmpService;
import com.xfyuao.util.PageUtil;
import com.xfyuao.util.Result;

/**
 * <p>
 * 前端控制器
 * </p>
 *
 * @author xfyuao
 * @since 2020-05-29
 */
@RestController
@RequestMapping("/dept")
public class DeptController {
	@Autowired // spring的DI，依赖注入，这个是自动注入，自动去spring容器找同名或同类型的对象给该属性赋值
	private DeptService deptService;
	@Autowired
	private EmpService empService;

	/**
	 * http://localhost:8080/dept/insert 新增，id自增
	 * 
	 * @param dept
	 * @return 0代表成功
	 */
	@RequestMapping("/insert")
	public Object insert(Dept dept) {
		// 简单的业务逻辑可以放在controller层实现
		// 新增前先判断是否已存在
		Dept dep = deptService.getOne(new QueryWrapper<Dept>().eq("dname", dept.getDname()));
		if (dep != null) {
			return new Result(1, "添加失败，该名称已存在！");
		}
		boolean bl = deptService.save(dept);
		if (bl) {
			return new Result(0, "添加成功！");
		}
		return new Result(2, "添加失败！");
	}

	/**
	 * http://localhost:8080/dept/delete 根据id删除
	 * 
	 * @param depNo
	 * @return 0代表成功
	 */
	@RequestMapping("/delete")
	public Object delete(Integer deptNo) {
		// 删除前先判断该部门下是否有数据（员工）
		List<Emp> list = empService.list(new QueryWrapper<Emp>().eq("dept_no", deptNo));
		if (!list.isEmpty()) {
			return new Result(1, "该部门下有数据，删除失败！");
		}
		boolean bl = deptService.removeById(deptNo);
		if (bl) {
			return new Result(0, "删除成功！");
		}
		return new Result(1, "删除失败！");
	}

	/**
	 * http://localhost:8080/dept/update 修改
	 * 
	 * @param dept
	 * @return 0代表成功
	 */
	@RequestMapping("/update")
	public Object update(Dept dept) {
		Dept dep = deptService.getOne(new QueryWrapper<Dept>().eq("dname", dept.getDname()));
		// 如果只判断名字，没修改直接提交时会报错，因为原名字是存在的
		// 所以还要判断id，如果传入的名字、id和根据名称查到的数据完全一样，表示是同一条，同一条就继续
		// 如果名称相同id不同，就是重名，提示修改失败
		if (dep != null && !dep.getDeptNo().equals(dept.getDeptNo())) {
			return new Result(1, "修改失败，该名称已存在！");
		}
		boolean bl = deptService.updateById(dept);
		if (bl) {
			return new Result(0, "修改成功！");
		}
		return new Result(1, "修改失败！");
	}

	/**
	 * http://localhost:8080/dept/selectPage 动态条件分页查
	 * 
	 * @param dept 查询条件 pageUtil 分页数据
	 * @return layui数据表格要的数据格式
	 */
	@RequestMapping("/selectPage")
	public Object selectPage(Dept dept, PageUtil p) {
		//也可以考虑把参数中的PageUtil换成Page<Dept>，只需要修改传入参数为current和size即可
		//封装分页对象
		Page<Dept> page=new Page<Dept>(p.getPage(), p.getLimit());
		//封装查询条件
		QueryWrapper<Dept> queryWrapper=new QueryWrapper<Dept>();
		if(dept.getDname()!=null && !dept.getDname().isEmpty()) {
			queryWrapper.like("dname", dept.getDname());
		}
		
		
		//出入条件和分页数据，调用分页方法查询
		page = deptService.page(page,queryWrapper);
		/*layui要的正确数据：			该页数据				总条数
		 * 	成功时：{"code":0, "msg":"", data:[{},{}...], count:100}
		 * 	code不为0则为失败，需要在msg中放入失败原因
		 */
		return new Result(0, "", page.getRecords(), page.getTotal());
	}

	/**
	 * http://localhost:8080/dept/selectAll 查全部
	 * 
	 * @return 全部部门
	 */
	@RequestMapping("/selectAll")
	public Object selectAll() {
		return deptService.list();
	}
}
